package com.tom.demo.listener.redis;

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.stereotype.Component;

/**
 * 用于监听 Redis 中的键过期事件。这个功能在需要在键过期时执行某些操作时非常有用
 * //只要redis中任意的key时效，都会被onMessage()方法所监听
 */
@Slf4j
@Component
public class RedisKeyExpireListener extends KeyExpirationEventMessageListener {

    public RedisKeyExpireListener(RedisMessageListenerContainer listenerContainer) {
        super(listenerContainer);
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        String expiredKey = message.toString();
        log.info("过期的key是:{}",expiredKey);//abc

        // 例如：如果是订单相关的key过期，可以处理订单超时逻辑
        if (expiredKey.startsWith("order:")) {
            String orderId = expiredKey.substring("order:".length());
            //下面可以调用我们的业务操作
            handleOrderExpiration(orderId);
        }
    }

    private void handleOrderExpiration(String orderId) {
        // 处理订单超时的业务逻辑
        System.out.println("Processing expired order: " + orderId);
        // orderService.handleExpiredOrder(orderId);
    }
}
